cmake_minimum_required (VERSION 3.0)

project( TDMonitorQt CXX )
set (CMAKE_CXX_STANDARD 11)
set (CMAKE_POSITION_INDEPENDENT_CODE ON)

if ( NOT CMAKE_CXX11_STANDARD_COMPILE_OPTION )
	include(CheckCXXCompilerFlag)
	CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
	CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
	if(COMPILER_SUPPORTS_CXX11)
		set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
	elseif(COMPILER_SUPPORTS_CXX0X)
		set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
	else()
		message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
	endif()
endif( NOT CMAKE_CXX11_STANDARD_COMPILE_OPTION )


if ( NOT DEFINED QT_SELECT )
	message( STATUS "QT_SELECT is not defined, set QT_SELECT as 5")
	set(QT_SELECT 5)
endif ( NOT DEFINED QT_SELECT )

if(NOT INSTALL_DIR)
	set (INSTALL_DIR "/opt/package_name_you_prefer")
endif(NOT INSTALL_DIR)

configure_file(
	${CMAKE_CURRENT_SOURCE_DIR}/config.h.in
	${CMAKE_CURRENT_BINARY_DIR}/config.h
)

file (GLOB UI_SOURCES "*.ui")

set (
	SOURCES
	main.cpp
	TDMonitor.cpp
	PublisherSelectDialog.cpp
	${CMAKE_CURRENT_BINARY_DIR}/config.h
)

set (
	SOURCES_MOC
	${CMAKE_CURRENT_BINARY_DIR}/TDMonitor.moc
	${CMAKE_CURRENT_BINARY_DIR}/PublisherSelectDialog.moc
)

set (
	LIBRARY
	pthread
	dl
)

if(${QT_SELECT} EQUAL 4)

	message( STATUS "Qt 4 Code Generation for ${PROJECT_NAME}")
	# https://cmake.org/cmake/help/v3.0/module/FindQt4.html
	find_package(Qt4)
	message( STATUS "Qt4_FOUND: ${Qt4_FOUND} (${QT_VERSION_MAJOR}.${QT_VERSION_MINOR}.${QT_VERSION_PATCH})")

	if ( ${Qt4_FOUND} )
		qt4_wrap_ui(UI_HEADERS ${UI_SOURCES}) # ui_*.h
		qt4_add_resources(QRC_CXX "TDMonitor.qrc") # qrc_*.cxx
		qt4_generate_moc("TDMonitor.h"	"TDMonitor.moc"	TARGET	TDMonitorQt)
		qt4_generate_moc("PublisherSelectDialog.h"	"PublisherSelectDialog.moc"	TARGET	TDMonitorQt)
		include_directories ("/usr/share/qt4/mkspecs/linux-g++-64")
		include_directories ("/usr/include/qt4")
		include_directories ("/usr/include/qt4/QtGui")
		include_directories(${CMAKE_CURRENT_BINARY_DIR})
	endif ( ${Qt4_FOUND} )

else(${QT_SELECT} EQUAL 4)

	message( STATUS "Qt 5 Code Generation for ${PROJECT_NAME}")
	# https://doc.qt.io/qt-5/cmake-manual.html
	find_package(Qt5Widgets)
	message( STATUS "Qt5Widgets_FOUND: ${Qt5Widgets_FOUND} (${Qt5Widgets_VERSION})")

	if ( ${Qt5Widgets_FOUND} )
		qt5_wrap_ui(UI_HEADERS ${UI_SOURCES}) # ui_*.h
		qt5_add_resources(QRC_CXX "TDMonitor.qrc") # qrc_*.cxx
		qt5_generate_moc("TDMonitor.h"	"TDMonitor.moc"	TARGET	TDMonitorQt)
		qt5_generate_moc("PublisherSelectDialog.h"	"PublisherSelectDialog.moc"	TARGET	TDMonitorQt)
		include_directories (${Qt5Widgets_INCLUDE_DIRS})
		include_directories ("/usr/include/x86_64-linux-gnu/qt5")
		include_directories ("/usr/include/x86_64-linux-gnu/qt5/QtWidgets")
		include_directories(${CMAKE_CURRENT_BINARY_DIR})
	endif ( ${Qt5Widgets_FOUND} )

endif(${QT_SELECT} EQUAL 4)

if ( "${Qt4_FOUND}" OR "${Qt5Widgets_FOUND}" )

	add_executable(TDMonitorQt ${UI_HEADERS} ${QRC_CXX} ${SOURCES} ${SOURCES_MOC})
	set_target_properties(TDMonitorQt PROPERTIES OUTPUT_NAME TDMonitor)
	target_include_directories(
		TDMonitorQt
		PUBLIC
		.
		${CMAKE_CURRENT_BINARY_DIR}
	)

	if(${QT_SELECT} EQUAL 4)
		target_link_libraries(TDMonitorQt ${LIBRARY} QtCore QtGui)
	else(${QT_SELECT} EQUAL 4)
		target_compile_options(TDMonitorQt PUBLIC -Wno-multichar -fPIC)
		target_link_libraries(TDMonitorQt ${LIBRARY} Qt5Core Qt5Gui Qt5Widgets)
	endif(${QT_SELECT} EQUAL 4)

	install (
		TARGETS TDMonitorQt
		DESTINATION ${INSTALL_DIR}/bin/
		PERMISSIONS
			OWNER_READ OWNER_WRITE OWNER_EXECUTE
			GROUP_READ             GROUP_EXECUTE
			WORLD_READ             WORLD_EXECUTE
	)

else ( "${Qt4_FOUND}" OR "${Qt5Widgets_FOUND}" )

	message( WARNING  "Neither Qt4 nor Qt5 does not found, skip building ${PROJECT_NAME}")

endif ( "${Qt4_FOUND}" OR "${Qt5Widgets_FOUND}" )

add_subdirectory(tr)
